﻿using System;
using System.Data;
using System.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Siav
{
    public partial class frmEmpresa : Form
    {
        public frmEmpresa()
        {
            InitializeComponent();
        }

        [DllImport("DllInscE32.DLL")]
        public static extern int ConsisteInscricaoEstadual(string sIE, string sUF);
        SiavEntities Entidades = new SiavEntities();

        public void Estados(string pUF)
        {
            var Estados = (from UF in Entidades.UnidadesDaFederacao
                           where UF.SiglaUF.Equals(pUF)
                           select UF).ToList();
            cboUF.DataSource = Estados;
            cboUF.DisplayMember = "NomeUF";
            cboUF.ValueMember = "SiglaUF";
        }

        public void Cidades(int pCidade)
        {
            var cidades = (from cid in Entidades.MunicipiosIBGE
                           where cid.Municipio.Equals(pCidade)
                           select cid).ToList();
            xMun.DataSource = cidades;
            xMun.DisplayMember = "NomeMunicipio";
            xMun.ValueMember = "Municipio";
        }

        public void Empresa()
        {
            var empresa = (from emp in Entidades.Empresa
                           where emp.Ccodigo == ClassesTransporte.Empresa.IdEmpresa
                           select emp).FirstOrDefault();
            Razao.Text = empresa.xNome;
            NomeFantasia.Text = empresa.xFant;
            Telefone.Text = empresa.fone;
            InsEstadual.Text = empresa.IE;
            CNPJ.Text = empresa.CNPJ;
            xLgr.Text = empresa.xLgr;
            CEP.Text = empresa.CEP;
            nro.Text = empresa.nro;
            xBairro.Text = empresa.xBairro;
            xMun.SelectedValue = empresa.xMun;
            cboUF.SelectedValue = empresa.UF;

        }

        public void Salvar()
        {
            try
            {
                var dados = Entidades.Empresa.FirstOrDefault();
                dados.CNPJ = CNPJ.Text;
                dados.xNome = Razao.Text;
                dados.xFant = NomeFantasia.Text;
                dados.IE = InsEstadual.Text;
                dados.xLgr = xLgr.Text;
                dados.nro = nro.Text;
                dados.xBairro = xBairro.Text;
                dados.cMun = int.Parse(xMun.SelectedValue.ToString());
                dados.xMun = xMun.SelectedText;
                dados.UF = cboUF.SelectedValue.ToString();
                dados.CEP = CEP.Text;
                dados.cPais = cPais.Text;
                dados.fone = Telefone.Text;

                Entidades.ObjectStateManager.ChangeObjectState(dados, EntityState.Modified);
                Entidades.SaveChanges();
                MessageBox.Show("Registro atualizado com sucesso", "Informação", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch(Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        private void frmEmpresa_Load(object sender, EventArgs e)
        {
            new FrmSelecaoEmpresa().ShowDialog();
            Empresa();
        }

        private void CEP_TextChanged(object sender, EventArgs e)
        {
            
            if (CEP.TextLength == 8)
            {
                clsEndereco.Endereco en = new clsEndereco.Endereco(); //instancia objeto do tipo endereço, para receber retornos do WS
                  DataSet dsX = new DataSet();
                  DataRow drX;
                  try
                  {
                      dsX.ReadXml(String.Format(@"http://www.buscarcep.com.br/?cep={0}&formato=xml&chave=1RAxnIBpXj1hTPlfMf2rYOahQkseHE/", CEP.Text));
                  }
                  catch
                  {
                      Validacoes.Erro("Não foi possível encontrar o WebService do site: www.buscarcep.com.br. \n\n Verifique sua Conexão de Internet !");
                      return;
                  }

                  drX = dsX.Tables["retorno"].Rows[0]; // Captura a 1ª linha da tabela do XML
                  en.Resul = int.Parse(drX["resultado"].ToString()); //Captura o resultado do WS
                  if (en.Resul == 1) // O cep foi localizado
                  {
                      en.TipoLogradouro = drX["tipo_logradouro"].ToString();
                      en.Logradouro = drX["logradouro"].ToString();
                      en.Bairro = drX["bairro"].ToString();
                      en.Cidade = drX["cidade"].ToString();
                      en.UF = drX["uf"].ToString();
                      en.IBGE = drX["ibge_municipio_verificador"].ToString();

                      xLgr.Text = String.Format("{0} {1}", en.TipoLogradouro, en.Logradouro);
                      xBairro.Text = en.Bairro;                    
                      cboUF.SelectedValue = en.UF;
                      xMun.SelectedValue = en.IBGE;
                      Estados(en.UF);
                      Cidades(int.Parse(en.IBGE));
                      ////////////////////////////////////
                      nro.Focus();
                  }
                  else if (en.Resul == -1)
                  {
                      //Limpar();
                      MessageBox.Show("Cep não encontrado !" + Environment.NewLine, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                  }
                  else if (en.Resul == -2)
                  {
                      //Limpar();
                      MessageBox.Show(string.Format("Formato de CEP inválido ! {0}", Environment.NewLine), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                  }
                  else if (en.Resul == -3)
                  {
                      //Limpar();
                      MessageBox.Show(string.Format("Busca de CEP congestionada. Aguarde alguns segundos e tente novamente. ! {0}", Environment.NewLine), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                  }
                  else if (en.Resul == -4)
                  {
                     // Limpar();
                      MessageBox.Show(string.Format("IP Banido.  contate o administrador ! {0}", Environment.NewLine), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                  }
                  else if (en.Resul == -5)
                  {
                    
                      MessageBox.Show(string.Format("Chave banida. contate o administrador ! {0}", Environment.NewLine), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                  }
                  else
                  {
                    
                      MessageBox.Show(string.Format("Erro na busca de CEP ! {0}", Environment.NewLine), "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                  }
                  
            }
        }

        private void cboUF_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void btnSalvarEmpresa_Click(object sender, EventArgs e)
        {
            Salvar();
        }

        private void InsEstadual_Leave(object sender, EventArgs e)
        {
            if (ConsisteInscricaoEstadual(InsEstadual.Text, "MT") != 0)
            {
                Validacoes.Erro("IE Inválida");
            }
        }
    }
}
